home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / c2p_edl.s < prev    next >
Text File  |  1997-01-31  |  5KB  |  138 lines

  1. *********************************************************************
  2. *   ______                             i    ______                  *
  3. *  // ___ \                            |   // ___ \                 *
  4. * // /  \\ \    -  - ----------------=<+>=-|| |-\\ \------ -  -     *
  5. * || ¯¯| ¯¯¯_ _______________________ _|___|| |  \\ \_____ _____ _  *
  6. * || __| ___|\| | |_|| | | | || ||_ |\||| ||| |  // /|_ | \|| ||\|  *
  7. * \\ \  // /| | | | ||   | | ||__|  | |||  || | // / |   \ ||__| |  *
  8. *  \\ ¯¯¯ / | | | | || | | | || ||  | ||| |\\ ¯¯¯ /  |  \ ||| || |® *
  9. *   ¯¯¯¯¯¯  ¯ ¯ ¯ ¯ ¯¯¯¯ ¯ ¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯¯   ¯¯¯ ¯¯¯¯¯¯¯ ¯  *
  10. *         Something for your mind, your body and your soul          *
  11. *********************************************************************
  12.  
  13. Chunky2Planar    ;a0 = byte pixels , a1 = plane 1
  14.         ;256 colour / 8 bitplane
  15.         
  16.         Movem.l    d2-d7/a2-a6,-(a7)
  17.         Movem.l    .Const(pc),d5-d7
  18.         Lea    40*256(a1),a2            Plane2 
  19.         Movea.l    a2,a3                Plane2
  20.         Lea    2*40*256(a1),a4            Plane3
  21.         Lea    2*40*256(a4),a5            Plane5
  22.         Lea    2*40*256(a5),a6            Plane7
  23.     Bra.s    .BPPLoop    
  24. .Const        Dc.l    $0f0f0f0f,$55555555,$3333cccc
  25.         Cnop    0,4
  26.  
  27. .BPPLoop    Move.l    (a0)+,d0    ; 12 get next 4 chunky pixels in d0
  28.         Move.l    (a0)+,d1    ; 12 get next 4 chunky pixels in d1
  29. ; d0 = a7a6a5a4a3a2a1a0 b7b6b5b4b3b2b1b0 c7c6c5c4c3c2c1c0 d7d6d5d4d3d2d1d0
  30. ; d1 = e7e6e5e4e3e2e1e0 f7f6f5f4f3f2f1f0 g7g6g5g4g3g2g1g0 h7h6h5h4h3h2h1h0
  31.  
  32.         Move.l    d0,d2        ;  4
  33.         Move.l    d1,d3        ;  4
  34.         And.l    d5,d2        ;  8 d5=$0f0f0f0f
  35.         And.l    d5,d3        ;  8 d5=$0f0f0f0f
  36.         Eor.l    d2,d0        ;  8
  37.         Eor.l    d3,d1        ;  8
  38. ; d0 = a7a6a5a4........ b7b6b5b4........ c7c6c5c4........ d7d6d5d4........
  39. ; d1 = e7e6e5e4........ f7f6f5f4........ g7g6g5g4........ h7h6h5h4........
  40. ; d2 = ........a3a2a1a0 ........b3b2b1b0 ........c3c2c1c0 ........d3d2d1d0
  41. ; d3 = ........e3e2e1e0 ........f3f2f1f0 ........g3g2g1g0 ........h3h2h1h0
  42.  
  43.         Lsl.l    #4,d2        ; 16
  44.         Lsr.l    #4,d1        ; 16
  45.         Or.l    d3,d2        ;  8
  46.         Or.l    d1,d0        ;  8
  47. ; d0 = a7a6a5a4e7e6e5e4 b7b6b5b4f7f6f5f4 c7c6c5c4g7g6g5g4 d7d6d5d4h7h6h5h4
  48. ; d2 = a3a2a1a0e3e2e1e0 b3b2b1b0f3f2f1f0 c3c2c1c0g3g2g1g0 d3d2d1d0h3h2h1h0
  49.  
  50.         Move.l    d0,d1        ;  4
  51.         Move.l    d2,d3        ;  4
  52.         And.l    d7,d1        ;  8    ;128
  53.         And.l    d7,d3        ;  8
  54.         Eor.l    d1,d0        ;  8
  55.         Eor.l    d3,d2        ;  8
  56.         Lsr.w    #2,d1        ; 10    
  57.         Lsr.w    #2,d3        ; 10
  58.         Swap    d1        ;  4
  59.         Swap    d3        ;  4
  60.         Lsl.w    #2,d1        ; 10
  61.         Lsl.w    #2,d3        ; 10
  62. ; d0 = a7a6....e7e6.... b7b6....f7f6.... ....c5c4....g5g4 ....d5d4....h5h4
  63. ; d1 = ....c7c6....g7g6 ....d7d6....h7h6 a5a4....e5e4.... b5b4....f5f4.... 
  64.  
  65.         Or.l    d1,d0        ;  8
  66.         Or.l    d3,d2        ;  8
  67. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 , d2=32/10
  68.  
  69.         Move.l    d0,d1        ;  4
  70.         Lsr.l    #7,d1        ; 22
  71. ; d0 = a7a6c7c6e7e6g7g6 b7b6d7d6f7f6h7h6 a5a4c5c4e5e4g5g4 b5b4d5d4f5f4h5h4 
  72. ; d1 = ..............a7 a6c7c6e7e6g7g6b7 b6d7d6f7f6h7h6a5 a4c5c4e5e4g5g4b5
  73.  
  74.         Move.l    d0,d3        ;  4
  75.         Move.l    d1,d4        ;  4
  76.         And.l    d6,d0        ;  8    ;258
  77.         And.l    d6,d1        ;  8
  78.         Eor.l    d0,d3        ;  8
  79.         Eor.l    d1,d4        ;  8
  80. ; d0 = ..a6..c6..e6..g6 ..b6..d6..f6..h6 ..a4..c4..e4..g4 ..b4..d4..f4..h4 
  81. ; d3 = a7..c7..e7..g7.. b7..d7..f7..h7.. a5..c5..e5..g5.. b5..d5..f5..h5.. 
  82. ; d1 = ..............a7 ..c7..e7..g7..b7 ..d7..f7..h7..a5 ..c5..e5..g5..b5
  83. ; d4 = ................ a6..c6..e6..g6.. b6..d6..f6..h6.. a4..c4..e4..g4..
  84.  
  85.         Or.l    d4,d0        ;  8
  86.         Or.l    d3,d1        ;  8
  87.         Lsr.l    #1,d1        ; 10
  88. ; d0 = ..a6..c6..e6..g6 a6b6c6d6e6f6g6h6 b6a4d6c4f6e4h6g4 a4b4c4d4e4f4g4h4
  89. ; d1 = ..a7..c7..e7..g7 a7b7c7d7e7f7g7h7 b7a5d7c5f7e5h7g5 a5b5c5d5e5f5g5h5
  90.  
  91.         move.b    d1,40*256(a5)    ; 12 plane 6
  92.         swap    d1        ;  4
  93.         move.b    d1,40*256(a6)    ; 12 plane 8
  94.         move.b    d0,(a5)+    ;  8 plane 5
  95.         swap    d0        ;  4
  96.         move.b    d0,(a6)+    ;  8 plane 7
  97.  
  98.         Move.l    d2,d1        ;  4
  99.         Lsr.l    #7,d1        ; 22
  100. ; d2 = a3a2c3c2e3e2g3g2 b3b2d3d2f3f2h3h2 a1a0c1c0e1e0g1g0 b1b0d1d0f1f0h1h0 
  101. ; d1 = ..............a3 a2c3c2e3e2g3g2b3 b2d3d2f3f2h3h2a1 a0c1c0e1e0g1g0b1
  102.  
  103.         Move.l    d2,d3        ;  4
  104.         Move.l    d1,d4        ;  4
  105.         And.l    d6,d2        ;  8
  106.         And.l    d6,d1        ;  8
  107.         Eor.l    d2,d3        ;  8
  108.         Eor.l    d1,d4        ;  8
  109. ; d2 = ..a2..c2..e2..g2 ..b2..d2..f2..h2 ..a0..c0..e0..g0 ..b0..d0..f0..h0 
  110. ; d3 = a3..c3..e3..g3.. b3..d3..f3..h3.. a1..c1..e1..g1.. b1..d1..f1..h1.. 
  111. ; d1 = ..............a3 ..c3..e3..g3..b3 ..d3..f3..h3..a1 ..c1..e1..g1..b1
  112. ; d4 = ................ a2..c2..e2..g2.. b2..d2..f2..h2.. a0..c0..e0..g0..        
  113.  
  114.         Or.l    d4,d2        ;  8
  115.         Or.l    d3,d1        ;  8
  116.         Lsr.l    #1,d1        ; 10    ;448
  117. ; d2 = ..a2..c2..e2..g2 a2b2c2d2e2f2g2h2 b2a0d2c0f2e0h2g0 a0b0c0d0e0f0g0h0
  118. ; d1 = ..a3..c3..e3..g3 a3b3c3d3e3f3g3h3 b3a1d3c1f3e1h3g1 a1b1c1d1e1f1g1h1
  119.         move.b    d1,(a3)+    ; 12 plane 2
  120.         swap    d1        ;  4
  121.         move.b    d1,40*256(a4)    ;  8 plane 4
  122.         move.b    d2,(a1)+    ;  8 plane 1
  123.         swap    d2        ;  4
  124.         move.b    d2,(a4)+    ;  8 plane 3 ;126 bytws
  125.         cmpa.l    a1,a2        ;  6    
  126.     bne    .BPPLoop        ; 10    
  127.         movem.l    (a7)+,d2-d7/a2-a6
  128.         rts
  129.  
  130. *        Length    Cycles    Cyc/pix.
  131. *MainLoop    132     508    63.5 
  132. *Double Main    258     1000    62.5    
  133.  
  134. *Seeing as we will probably be averaging at least 50000 pixels per "frame" any 
  135. *cycle saving is significant
  136.  
  137.  
  138.